"""
文件名称: constant.py
功能: 常量参数文件：所有可修改参数
作者: 喻越
创建日期: 2025-01-15
"""
import numpy as np
from . import const

# 区域常量
# 仿真区域边长，单位为米，代表一个 1km * 1km 的正方形区域
const.L = 1000

# 路径参数
# 路径衰减系数，用于描述信号在传播过程中的衰减程度
const.ALPHA = 2.5
# 白噪声功率，在信号接收时会产生的背景噪声功率
const.NOISE = 3e-09

# 用户参数
# 用户信噪比要求上限，单位为 dB，用户可接受的最大信噪比
const.SINR_MAX = 40
# 用户信噪比要求下限，单位为 dB，用户正常通信所需的最小信噪比
const.SINR_MIN = 20

# 网络常数
# 基站的总数量
const.BS_NUM = 4
# 用户的总数量
const.UE_NUM = 20
# 每个时刻对应的用户数量基础值列表，可用于模拟不同时刻的用户数量变化
const.UE_NUM_BASE = [10, 7, 4, 3, 2, 2, 3, 4, 6, 8, 9, 10, 10, 11, 11, 13, 13, 13, 14, 15, 16, 16, 15, 13]
# 将基础用户数量乘以 3，得到潮汐用户数列表，模拟不同时刻的用户数量变化
const.UE_NUM_SEQUENCE = [i * 3 for i in const.UE_NUM_BASE]
# 随机种子，用于保证随机数生成的可重复性，方便实验结果的复现
const.SEED = 1

# 网络参数
# 功放效率，即功率放大器将输入功率转换为输出功率的效率
const.ETA = 0.16
# 宏基站在工作状态下的静态功率，不随发射功率变化的固定功率消耗
const.P_STATIC_WORK_MACRO = 800
# 微基站在工作状态下的静态功率，不随发射功率变化的固定功率消耗
const.P_STATIC_WORK_MICRO = 200
# 宏基站在休眠状态下的静态功率，休眠时的固定功率消耗
const.P_STATIC_SLEEP_MACRO = 100
# 微基站在休眠状态下的静态功率，休眠时的固定功率消耗
const.P_STATIC_SLEEP_MICRO = 50

# 宏基站的最大发射功率，单位为瓦
const.P_MAX_MACRO = 120
# 微基站的最大发射功率，单位为瓦
const.P_MAX_MICRO = 40

# 宏基站的最大功耗，包括发射功率和静态工作功率
const.P_BS_MAX_MACRO = const.P_MAX_MACRO / const.ETA + const.P_STATIC_WORK_MACRO
# 微基站的最大功耗，包括发射功率和静态工作功率
const.P_BS_MAX_MICRO = const.P_MAX_MICRO / const.ETA + const.P_STATIC_WORK_MICRO

# 每个资源块分配的发射功率，单位为瓦
const.RB_PR = 0.5
# 宏基站总共的资源块数量
const.RB_MAX_MACRO = const.P_MAX_MACRO / const.RB_PR
# 微基站总共的资源块数量
const.RB_MAX_MICRO = const.P_MAX_MICRO / const.RB_PR
# 一个形状为 [1, BS_NUM] 的数组，用于存储每个基站的最大资源块数
const.RB_MAX = np.ones(shape=[1, const.BS_NUM])
# 先将所有基站的最大资源块数初始化为微基站的最大资源块数
const.RB_MAX[:, :] = const.RB_MAX_MICRO
# 将第一个基站（假设为宏基站）的最大资源块数设置为宏基站的最大资源块数
const.RB_MAX[0, 0] = const.RB_MAX_MACRO

# 宏基站的总带宽，单位为赫兹 20M
const.W_MAX_MACRO = 20000000
# 微基站的总带宽，单位为赫兹 5M
const.W_MAX_MICRO = 5000000
# 宏基站每个资源块的带宽，单位为赫兹
const.RB_W_MACRO = const.W_MAX_MACRO / const.RB_MAX_MACRO
# 微基站每个资源块的带宽，单位为赫兹
const.RB_W_MICRO = const.W_MAX_MICRO / const.RB_MAX_MICRO
# 一个形状为 [1, BS_NUM] 的数组，用于存储每个基站的资源块带宽
const.RB_W = np.zeros(shape=[1, const.BS_NUM])
# 先将所有基站的资源块带宽初始化为微基站的资源块带宽
const.RB_W[:, :] = const.RB_W_MICRO
# 将第一个基站（假设为宏基站）的资源块带宽设置为宏基站的资源块带宽
const.RB_W[0, 0] = const.RB_W_MACRO

# 其他网络参数
# 一个形状为 [1, BS_NUM] 的数组，用于存储每个基站的工作功率
const.P_WORK = np.ones(shape=[1, const.BS_NUM])
# 先将所有基站的工作功率初始化为微基站的工作静态功率
const.P_WORK[:, :] = const.P_STATIC_WORK_MICRO
# 将第一个基站（假设为宏基站）的工作功率设置为宏基站的工作静态功率
const.P_WORK[0, 0] = const.P_STATIC_WORK_MACRO
# 一个形状为 [1, BS_NUM] 的数组，用于存储每个基站的休眠功率
const.P_SLEEP = np.ones(shape=[1, const.BS_NUM])
# 先将所有基站的休眠功率初始化为微基站的休眠静态功率
const.P_SLEEP[:, :] = const.P_STATIC_SLEEP_MICRO
# 将第一个基站（假设为宏基站）的休眠功率设置为宏基站的休眠静态功率
const.P_SLEEP[0, 0] = const.P_STATIC_SLEEP_MACRO
# 一个形状为 [1, BS_NUM] 的全 1 数组，可用于一些计算中的辅助操作
const.ONE_BS = np.ones(shape=[1, const.BS_NUM])
# const.ONE_UE = np.ones(shape=[const.UE_NUM, 1])
# 一个形状为 [1, BS_NUM] 的全 0 数组，可用于一些计算中的辅助操作
const.ZERO_BS = np.zeros(shape=[1, const.BS_NUM])
# const.ONE = np.ones(shape=[const.UE_NUM, const.BS_NUM])

# 电池参数
# 电池的放电下限
const.BATTERY_MIN = 100
# 电池的充电上限
const.BATTERY_MAX = 2000
# 电池的充放电效率，即充电和放电过程中的能量转换效率
const.ETA_BATTERY = 0.9

# 光伏板参数
# 光伏板的光电转换效率，将太阳能转换为电能的比例
const.GAMMA_PV = 0.2
# 宏基站配备的光伏板面积，单位为平方米
const.S_PV_MACRO = 8
# 微基站配备的光伏板面积，单位为平方米
const.S_PV_MICRO = 4

const.PV_A = 585.41 # 武汉地区光伏功率的最大值相关参数，用于计算光伏功率
const.PV_B = 11.82
const.PV_C = 3.89

# 能源参数
# 电力线的损耗率，即电力在传输过程中的能量损耗比例
const.BETA = 0.9

# 其他参数
# 传统能源的碳排放因子，单位电量产生的碳排放量
const.ETA_GRID = 8e-04
# 光伏能源的碳排放因子，单位电量产生的碳排放量
const.ETA_PV = 1e-04

# 要求
# 用户在线率要求，即满足通信需求的用户比例
const.UE_REQ = 1.0
# 光伏利用率要求，即实际利用的光伏电量占总光伏发电量的比例
const.PV_REQ = 1.0

# 步长参数
# 仿真的最大步数，可代表仿真的总时长，这里假设每步代表 60 秒，共 24 小时
const.MAX_STEP = 24